WebAssembly GCææ¡ã«ããããããŒãžããªããžã§ã¯ãã®ã¡ã¢ãªæ§æãæ·±æããã¬ã€ã¢ãŠããã¡ã¿ããŒã¿ãããã©ãŒãã³ã¹ãšçžäºéçšæ§ãžã®åœ±é¿ã解説ããŸãã
WebAssembly GCãªããžã§ã¯ãã¬ã€ã¢ãŠãïŒãããŒãžããªããžã§ã¯ãã®ã¡ã¢ãªæ§æãçè§£ãã
WebAssemblyïŒWasmïŒã¯ãããŸããŸãªããã°ã©ãã³ã°èšèªããçæãããã³ãŒãã«å¯ŸããŠãããŒã¿ãã«ã§å¹ççãã€å®å šãªå®è¡ç°å¢ãæäŸããããšã§ããŠã§ãéçºã«é©åœããããããŸãããã¬ããŒãžã³ã¬ã¯ã·ã§ã³ïŒGCïŒææ¡ã®å°å ¥ã«ãããWasmã¯JavaãC#ãKotlinãTypeScriptãªã©ã®ãããŒãžãã¡ã¢ãªã¢ãã«ãæã€èšèªãå¹ççã«ãµããŒãããèœåãæ¡å€§ããŸããWasmGCå ã®ãããŒãžããªããžã§ã¯ãã®ã¡ã¢ãªæ§æãçè§£ããããšã¯ãããã©ãŒãã³ã¹ã®æé©åãèšèªéã®çžäºéçšæ§ã®å®çŸããããŠæŽç·Žãããã¢ããªã±ãŒã·ã§ã³ã®æ§ç¯ã«ãšã£ãŠæ¥µããŠéèŠã§ãããã®èšäºã§ã¯ãWasmGCãªããžã§ã¯ãã¬ã€ã¢ãŠãã«ã€ããŠãäž»èŠãªæŠå¿µãèšèšäžã®èæ ®äºé ãããã³å®è·µçãªåœ±é¿ãå æ¬çã«æ¢ããŸãã
WebAssembly GCå ¥é
åŸæ¥ã®WebAssemblyã«ã¯ãã¬ããŒãžã³ã¬ã¯ã·ã§ã³èšèªã®çŽæ¥çãªãµããŒãããããŸããã§ãããæ¢åã®ãœãªã¥ãŒã·ã§ã³ã¯ãJavaScriptãžã®ã³ã³ãã€ã«ïŒããã©ãŒãã³ã¹ãªãŒããŒããããçºçïŒããWebAssemblyã®ç·åœ¢ã¡ã¢ãªå ã«ã«ã¹ã¿ã ã®ã¬ããŒãžã³ã¬ã¯ã¿ãå®è£ ããïŒè€éã§å¹çãæªãå¯èœæ§ãããïŒãã®ããããã«äŸåããŠããŸãããWasmGCææ¡ã¯ãã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã®ãã€ãã£ããµããŒããå°å ¥ããããšã§ãã®å¶éã«å¯ŸåŠãããã©ãŠã¶ããã®ä»ã®ç°å¢ã§ãããŒãžãèšèªãããå¹ççãã€ã·ãŒã ã¬ã¹ã«å®è¡ã§ããããã«ããŸãã
WasmGCã®äž»ãªå©ç¹ã¯æ¬¡ã®ãšããã§ãïŒ
- ããã©ãŒãã³ã¹ã®åäžïŒ ãã€ãã£ãGCãµããŒãã«ãããã«ã¹ã¿ã GCå®è£ ãJavaScriptãžã®äŸåã«ãããªãŒããŒãããããªããªããŸãã
- ã³ãŒããµã€ãºã®åæžïŒ ãããŒãžãèšèªã¯WasmGCã®çµã¿èŸŒã¿æ©èœã掻çšã§ãããããã³ã³ãã€ã«ãããWasmã¢ãžã¥ãŒã«ã®ãµã€ãºãåæžãããŸãã
- éçºã®ç°¡çŽ åïŒ éçºè ã¯ã倧ããªããã©ãŒãã³ã¹ã®ããã«ãã£ãªãã«ãäœ¿ãæ £ãããããŒãžãèšèªã䜿çšã§ããŸãã
- çžäºéçšæ§ã®åŒ·åïŒ WasmGCã¯ãç°ãªããããŒãžãèšèªéãããã³ãããŒãžãèšèªãšæ¢åã®WebAssemblyã³ãŒãéã®çžäºéçšæ§ãä¿é²ããŸãã
WasmGCã«ããããããŒãžããªããžã§ã¯ãã®ã³ã¢ã³ã³ã»ãã
ã¬ããŒãžã³ã¬ã¯ã·ã§ã³ç°å¢ã§ã¯ããªããžã§ã¯ãã¯ã¡ã¢ãªã«åçã«å²ãåœãŠãããå°éäžèœã«ãªããšèªåçã«è§£æŸãããŸããã¬ããŒãžã³ã¬ã¯ã¿ã¯æªäœ¿çšã®ã¡ã¢ãªãç¹å®ããŠååããéçºè ãããã¥ã¢ã«ã§ã®ã¡ã¢ãªç®¡çããè§£æŸããŸãããããã®ãããŒãžããªããžã§ã¯ãã®ã¡ã¢ãªå ã§ã®æ§æãçè§£ããããšã¯ãã³ã³ãã€ã©äœæè ãšã¢ããªã±ãŒã·ã§ã³éçºè ã®äž¡æ¹ã«ãšã£ãŠäžå¯æ¬ ã§ãã
ãªããžã§ã¯ãããã
WasmGCã®åãããŒãžããªããžã§ã¯ãã¯ãéåžžããªããžã§ã¯ããããã§å§ãŸããŸãããã®ãããã«ã¯ããªããžã§ã¯ãã®åããµã€ãºãã¹ããŒã¿ã¹ãã©ã°ãªã©ã®ã¡ã¿ããŒã¿ãå«ãŸããŠããŸãããªããžã§ã¯ããããã®å ·äœçãªå 容ãšã¬ã€ã¢ãŠãã¯å®è£ å®çŸ©ã§ãããäžè¬çã«ä»¥äžã®ãã®ãå«ãŸããŸãïŒ
- åæ å ±ïŒ ãªããžã§ã¯ãã®æ§é ããã£ãŒã«ããã¡ãœããã«é¢ããæ å ±ãæäŸããåèšè¿°åãžã®ãã€ã³ã¿ãŸãã¯ã€ã³ããã¯ã¹ãããã«ãããGCã¯ãªããžã§ã¯ãã®ãã£ãŒã«ããæ£ããèµ°æ»ããåå®å šãªæäœãå®è¡ã§ããŸãã
- ãµã€ãºæ å ±ïŒ ãªããžã§ã¯ãã®ãµã€ãºïŒãã€ãåäœïŒãããã¯ã¡ã¢ãªã®å²ãåœãŠãšè§£æŸãããã³ã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã«äœ¿çšãããŸãã
- ãã©ã°ïŒ ãªããžã§ã¯ããçŸåšåéäžãããã¡ã€ãã©ã€ãºããããããã³çããããŠãããïŒã¬ããŒãžã³ã¬ã¯ã¿ã«ããç§»åãçŠæ¢ãããŠãããïŒãªã©ããªããžã§ã¯ãã®ã¹ããŒã¿ã¹ã瀺ããã©ã°ã
- åæããªããã£ãïŒãªãã·ã§ã³ïŒïŒ ãã«ãã¹ã¬ããç°å¢ã§ã¯ããªããžã§ã¯ããããã«ã¹ã¬ããã»ãŒããã£ã確ä¿ããããã®ããã¯ãªã©ã®åæããªããã£ããå«ãŸããããšããããŸãã
ãªããžã§ã¯ããããã®ãµã€ãºãšã¢ã©ã€ã¡ã³ãã¯ãããã©ãŒãã³ã¹ã«å€§ããªåœ±é¿ãäžããå¯èœæ§ããããŸããããããå°ããã»ã©ã¡ã¢ãªãªãŒããŒããããæžããé©åãªã¢ã©ã€ã¡ã³ãã«ãã£ãŠå¹ççãªã¡ã¢ãªã¢ã¯ã»ã¹ãä¿èšŒãããŸãã
ãªããžã§ã¯ããã£ãŒã«ã
ãªããžã§ã¯ããããã«ç¶ããŠããªããžã§ã¯ãã«é¢é£ä»ããããå®éã®ããŒã¿ãæ ŒçŽãããªããžã§ã¯ãã®ãã£ãŒã«ãããããŸãããããã®ãã£ãŒã«ãã®ã¬ã€ã¢ãŠãã¯ããªããžã§ã¯ãã®åå®çŸ©ã«ãã£ãŠæ±ºãŸããŸãããã£ãŒã«ãã¯ãããªããã£ãåïŒäŸïŒæŽæ°ãæµ®åå°æ°ç¹æ°ãããŒã«å€ïŒãä»ã®ãããŒãžããªããžã§ã¯ããžã®åç §ããŸãã¯ããªããã£ãåãåç §ã®é åã«ããããšãã§ããŸãã
ãã£ãŒã«ããã¡ã¢ãªã«é 眮ãããé åºã¯ããã£ãã·ã¥ã®å±ææ§ã®ããã«ããã©ãŒãã³ã¹ã«åœ±é¿ãäžããå¯èœæ§ããããŸããã³ã³ãã€ã©ã¯ãã£ãã·ã¥ã®å©çšçãåäžãããããã«ãã£ãŒã«ããäžŠã¹æ¿ããããšããããŸãããããã¯ãªããžã§ã¯ãã®ã»ãã³ãã£ãã¯ãªæå³ãä¿æããæ¹æ³ã§è¡ãããªããã°ãªããŸããã
é å
é åã¯ãåãåã®èŠçŽ ã®ã·ãŒã±ã³ã¹ãæ ŒçŽããé£ç¶ããã¡ã¢ãªãããã¯ã§ããWasmGCã§ã¯ãé åã¯ããªããã£ãåã®é åãŸãã¯ãããŒãžããªããžã§ã¯ããžã®åç §ã®é åã®ããããã«ãªããŸããé åã®ã¬ã€ã¢ãŠãã«ã¯éåžžãæ¬¡ã®ãã®ãå«ãŸããŸãïŒ
- é åãããïŒ ãªããžã§ã¯ãããããšåæ§ã«ãé åãããã«ã¯ãåãé·ããèŠçŽ ãµã€ãºãªã©ãé åã«é¢ããã¡ã¿ããŒã¿ãå«ãŸããŸãã
- èŠçŽ ããŒã¿ïŒ ã¡ã¢ãªã«é£ç¶ããŠæ ŒçŽãããå®éã®é åèŠçŽ ã
å¹ççãªé åã¢ã¯ã»ã¹ã¯ãå€ãã®ã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠéåžžã«éèŠã§ããWasmGCã®å®è£ ã§ã¯ãã€ã³ããã¯ã¹ã«ããèŠçŽ ãžã®ã¢ã¯ã»ã¹ãé åã®å埩åŠçãªã©ãé åæäœã®ããã®æé©åãããåœä»€ãæäŸãããããšããããããŸãã
ã¡ã¢ãªæ§æã®è©³çް
WasmGCã«ããããããŒãžããªããžã§ã¯ãã®æ£ç¢ºãªã¡ã¢ãªã¬ã€ã¢ãŠãã¯å®è£ å®çŸ©ã§ãããç°ãªãWasmãšã³ãžã³ãããããã®ã¢ãŒããã¯ãã£ãã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã¢ã«ãŽãªãºã ã«åãããŠæé©åããããšãå¯èœã§ããããããå®è£ éã§å ±éããç¹å®ã®ååãèæ ®äºé ããããŸãã
ã¢ã©ã€ã¡ã³ã
ã¢ã©ã€ã¡ã³ããšã¯ãããŒã¿ãç¹å®ã®å€ã®åæ°ã§ããã¡ã¢ãªã¢ãã¬ã¹ã«æ ŒçŽãããªããã°ãªããªããšããèŠä»¶ãæããŸããäŸãã°ã4ãã€ãã®æŽæ°ã¯4ãã€ãå¢çã«ã¢ã©ã€ã¡ã³ããããå¿ èŠããããããããŸãããã¢ã©ã€ã¡ã³ããããŠããªãã¡ã¢ãªã¢ã¯ã»ã¹ã¯ãäžéšã®ã¢ãŒããã¯ãã£ã§ã¯äœéã«ãªã£ãããããŒããŠã§ã¢äŸå€ãåŒãèµ·ããããããå¯èœæ§ããããããã¢ã©ã€ã¡ã³ãã¯ããã©ãŒãã³ã¹ã«ãšã£ãŠéèŠã§ãã
WasmGCã®å®è£ ã§ã¯ãéåžžããªããžã§ã¯ãããããšãã£ãŒã«ãã«å¯ŸããŠã¢ã©ã€ã¡ã³ãèŠä»¶ãé©çšãããŸããå ·äœçãªã¢ã©ã€ã¡ã³ãèŠä»¶ã¯ãããŒã¿åãã¿ãŒã²ããã¢ãŒããã¯ãã£ã«ãã£ãŠç°ãªãå ŽåããããŸãã
ããã£ã³ã°
ããã£ã³ã°ãšã¯ãã¢ã©ã€ã¡ã³ãèŠä»¶ãæºããããã«ããªããžã§ã¯ãå ã®ãã£ãŒã«ãéã«äœåãªãã€ããæ¿å ¥ããããšãæããŸããäŸãã°ããªããžã§ã¯ãã«1ãã€ãã®ããŒã«åãã£ãŒã«ããšããã«ç¶ã4ãã€ãã®æŽæ°åãã£ãŒã«ããå«ãŸããŠããå Žåãã³ã³ãã€ã©ã¯ããŒã«åãã£ãŒã«ãã®åŸã«3ãã€ãã®ããã£ã³ã°ãæ¿å ¥ããŠãæŽæ°åãã£ãŒã«ãã4ãã€ãå¢çã«ã¢ã©ã€ã¡ã³ããããããã«ãããããããŸããã
ããã£ã³ã°ã¯ãªããžã§ã¯ãã®ãµã€ãºãå¢å ãããå¯èœæ§ããããŸãããããã©ãŒãã³ã¹ã®ããã«ã¯å¿ èŠã§ããã³ã³ãã€ã©ã¯ãã¢ã©ã€ã¡ã³ãèŠä»¶ãæºããã€ã€ãããã£ã³ã°ãæå°éã«æããããšãç®æããŸãã
ãªããžã§ã¯ãåç §
ãªããžã§ã¯ãåç §ã¯ããããŒãžããªããžã§ã¯ããžã®ãã€ã³ã¿ã§ããWasmGCã§ã¯ããªããžã§ã¯ãåç §ã¯éåžžã¬ããŒãžã³ã¬ã¯ã¿ã«ãã£ãŠç®¡çãããåžžã«æå¹ãªãªããžã§ã¯ããæããŠããããšãä¿èšŒãããŸãããªããžã§ã¯ããã¬ããŒãžã³ã¬ã¯ã¿ã«ãã£ãŠç§»åããããšããã®ãªããžã§ã¯ããžã®ãã¹ãŠã®åç §ãããã«å¿ããŠæŽæ°ãããŸãã
ãªããžã§ã¯ãåç §ã®ãµã€ãºã¯ã¢ãŒããã¯ãã£ã«äŸåããŸãã32ãããã¢ãŒããã¯ãã£ã§ã¯ããªããžã§ã¯ãåç §ã¯éåžž4ãã€ãã§ãã64ãããã¢ãŒããã¯ãã£ã§ã¯ãéåžž8ãã€ãã§ãã
åèšè¿°å
åèšè¿°åã¯ããªããžã§ã¯ãã®æ§é ãšæ¯ãèãã«é¢ããæ å ±ãæäŸããŸãããããã¯ãã¬ããŒãžã³ã¬ã¯ã¿ãã³ã³ãã€ã©ãããã³ã©ã³ã¿ã€ã ã·ã¹ãã ã«ãã£ãŠãåå®å šãªæäœãå®è¡ããã¡ã¢ãªãå¹ççã«ç®¡çããããã«äœ¿çšãããŸããåèšè¿°åã«ã¯éåžžã以äžã®ãã®ãå«ãŸããŸãïŒ
- ãã£ãŒã«ãæ å ±ïŒ ååãåããªãã»ãããå«ãããªããžã§ã¯ãã®ãã£ãŒã«ãã®ãªã¹ãã
- ã¡ãœããæ å ±ïŒ ååãã·ã°ããã£ãã¢ãã¬ã¹ãå«ãããªããžã§ã¯ãã®ã¡ãœããã®ãªã¹ãã
- ç¶æ¿æ å ±ïŒ ã¹ãŒããŒã¯ã©ã¹ãã€ã³ã¿ãŒãã§ãŒã¹ãå«ãããªããžã§ã¯ãã®ç¶æ¿éå±€ã«é¢ããæ å ±ã
- ã¬ããŒãžã³ã¬ã¯ã·ã§ã³æ å ±ïŒ ã¬ããŒãžã³ã¬ã¯ã¿ããªããžã§ã¯ãã®ãã£ãŒã«ããèµ°æ»ããä»ã®ãããŒãžããªããžã§ã¯ããžã®åç §ãèå¥ããããã«äœ¿çšããæ å ±ã
åèšè¿°åã¯ãå¥ã®ããŒã¿æ§é ã«æ ŒçŽããããšãããªããžã§ã¯ãèªäœã«åã蟌ãããšãã§ããŸããã©ã¡ããéžæãããã¯å®è£ ã«ãããŸãã
å®è·µçãªåœ±é¿
WasmGCã®ãªããžã§ã¯ãã¬ã€ã¢ãŠããçè§£ããããšã¯ãã³ã³ãã€ã©äœæè ãã¢ããªã±ãŒã·ã§ã³éçºè ãããã³Wasmãšã³ãžã³ã®å®è£ è ã«ãšã£ãŠãããã€ãã®å®è·µçãªæå³ãæã¡ãŸãã
ã³ã³ãã€ã©ã®æé©å
ã³ã³ãã€ã©ã¯ãWasmGCã®ãªããžã§ã¯ãã¬ã€ã¢ãŠãã«é¢ããç¥èãæŽ»çšããŠãã³ãŒãçæãæé©åã§ããŸããäŸãã°ãã³ã³ãã€ã©ã¯ãã£ãŒã«ããäžŠã¹æ¿ããŠãã£ãã·ã¥ã®å±ææ§ãæ¹åããããããã£ã³ã°ãæå°åããŠãªããžã§ã¯ããµã€ãºãåæžãããããªããžã§ã¯ããã£ãŒã«ãã«ã¢ã¯ã»ã¹ããããã®å¹ççãªã³ãŒããçæãããã§ããŸãã
ã³ã³ãã€ã©ã¯ãŸããåæ å ±ã䜿çšããŠéçè§£æãè¡ããäžèŠãªã©ã³ã¿ã€ã ãã§ãã¯ãæé€ããããšãã§ããŸããããã«ãããããã©ãŒãã³ã¹ãåäžããã³ãŒããµã€ãºãåæžãããŸãã
ã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã®ãã¥ãŒãã³ã°
ã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã¢ã«ãŽãªãºã ã¯ãç¹å®ã®ãªããžã§ã¯ãã¬ã€ã¢ãŠããæŽ»çšããããã«ãã¥ãŒãã³ã°ã§ããŸããäŸãã°ãäžä»£å¥ã¬ããŒãžã³ã¬ã¯ã¿ã¯ãã¬ããŒãžã§ããå¯èœæ§ãé«ãè¥ããªããžã§ã¯ãã®åéã«éäžã§ããŸããããã«ãããã¬ããŒãžã³ã¬ã¯ã¿å šäœã®ããã©ãŒãã³ã¹ãåäžããŸãã
ã¬ããŒãžã³ã¬ã¯ã¿ã¯ãŸããåæ å ±ã䜿çšããŠç¹å®ã®åã®ãªããžã§ã¯ããèå¥ããåéããããšãã§ããŸããããã¯ããã¡ã€ã«ãã³ãã«ããããã¯ãŒã¯æ¥ç¶ãªã©ã®ãªãœãŒã¹ã管çããã®ã«åœ¹ç«ã¡ãŸãã
çžäºéçšæ§
WasmGCã®ãªããžã§ã¯ãã¬ã€ã¢ãŠãã¯ãç°ãªããããŒãžãèšèªéã®çžäºéçšæ§ã«ãããŠéèŠãªåœ¹å²ãæãããŸããå ±éã®ãªããžã§ã¯ãã¬ã€ã¢ãŠããå ±æããèšèªã¯ããªããžã§ã¯ããããŒã¿ãç°¡åã«äº€æã§ããŸããããã«ãããéçºè ã¯ç°ãªãèšèªã§æžãããã³ãŒããçµã¿åãããã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ã§ããŸãã
äŸãã°ãWasmGCäžã§å®è¡ãããJavaã¢ããªã±ãŒã·ã§ã³ã¯ãå ±éã®ãªããžã§ã¯ãã¬ã€ã¢ãŠãã«åæããŠããã°ãWasmGCäžã§å®è¡ãããC#ã©ã€ãã©ãªãšå¯Ÿè©±ã§ããŸãã
ãããã°ãšãããã¡ã€ãªã³ã°
WasmGCã®ãªããžã§ã¯ãã¬ã€ã¢ãŠããçè§£ããããšã¯ãã¢ããªã±ãŒã·ã§ã³ã®ãããã°ãšãããã¡ã€ãªã³ã°ã«äžå¯æ¬ ã§ãããããã¬ã¯ãªããžã§ã¯ãã¬ã€ã¢ãŠãæ å ±ã䜿çšããŠãªããžã§ã¯ãã®å å®¹ãæ€æ»ããã¡ã¢ãªãªãŒã¯ã远跡ã§ããŸãããããã¡ã€ã©ã¯ãªããžã§ã¯ãã¬ã€ã¢ãŠãæ å ±ã䜿çšããŠããã©ãŒãã³ã¹ã®ããã«ããã¯ãç¹å®ããã³ãŒããæé©åã§ããŸãã
äŸãã°ããããã¬ã¯ãªããžã§ã¯ãã¬ã€ã¢ãŠãæ å ±ã䜿çšããŠããªããžã§ã¯ãã®ãã£ãŒã«ãã®å€ã衚瀺ãããããªããžã§ã¯ãéã®åç §ããã¬ãŒã¹ãããã§ããŸãã
äŸ
WasmGCã®ãªããžã§ã¯ãã¬ã€ã¢ãŠãããããã€ãã®ç°¡åãªäŸã§èª¬æããŸãã
äŸ1ïŒåçŽãªã¯ã©ã¹
2ã€ã®ãã£ãŒã«ããæã€åçŽãªã¯ã©ã¹ãèããŸãïŒ
class Point {
int x;
int y;
}
ãã®ã¯ã©ã¹ã®WasmGC衚çŸã¯æ¬¡ã®ããã«ãªããããããŸããïŒ
[ãªããžã§ã¯ãããã] (äŸïŒåèšè¿°åãã€ã³ã¿ããµã€ãº) [x: int] (4ãã€ã) [y: int] (4ãã€ã)
ãªããžã§ã¯ããããã«ã¯ã`Point`ã¯ã©ã¹ã®åèšè¿°åãžã®ãã€ã³ã¿ããªããžã§ã¯ãã®ãµã€ãºãªã©ã®ã¡ã¿ããŒã¿ãå«ãŸããŸãã`x`ãš`y`ã®ãã£ãŒã«ãã¯ããªããžã§ã¯ããããã®åŸã«é£ç¶ããŠæ ŒçŽãããŸãã
äŸ2ïŒãªããžã§ã¯ãã®é å
次ã«ã`Point`ãªããžã§ã¯ãã®é åãèããŸãïŒ
Point[] points = new Point[10];
ãã®é åã®WasmGC衚çŸã¯æ¬¡ã®ããã«ãªããããããŸããïŒ
[é åããã] (äŸïŒåèšè¿°åãã€ã³ã¿ãé·ããèŠçŽ ãµã€ãº) [èŠçŽ 0: Point] (Pointãªããžã§ã¯ããžã®åç §) [èŠçŽ 1: Point] (Pointãªããžã§ã¯ããžã®åç §) ... [èŠçŽ 9: Point] (Pointãªããžã§ã¯ããžã®åç §)
é åãããã«ã¯ã`Point[]`ã®åèšè¿°åãžã®ãã€ã³ã¿ãé åã®é·ããåèŠçŽ ã®ãµã€ãºïŒ`Point`ãªããžã§ã¯ããžã®åç §ïŒãªã©ã®ã¡ã¿ããŒã¿ãå«ãŸããŸããé åã®èŠçŽ ã¯é åãããã®åŸã«é£ç¶ããŠæ ŒçŽãããããããã`Point`ãªããžã§ã¯ããžã®åç §ãå«ãã§ããŸãã
äŸ3ïŒæåå
æååã¯ããã®äžå€æ§ãšé »ç¹ãªäœ¿çšã®ããã«ããããŒãžãèšèªã§ç¹å¥ã«æ±ãããããšããããããŸããæååã¯æ¬¡ã®ããã«è¡šçŸããããããããŸããïŒ
[ãªããžã§ã¯ãããã] (äŸïŒåèšè¿°åãã€ã³ã¿ããµã€ãº) [é·ã: int] (4ãã€ã) [æå: char[]] (æåã®é£ç¶é å)
ãªããžã§ã¯ããããã¯ããããæååã§ããããšãèå¥ããŸããé·ããã£ãŒã«ãã¯æååã®æåæ°ãæ ŒçŽããæåãã£ãŒã«ãã¯å®éã®æååããŒã¿ãå«ã¿ãŸãã
ããã©ãŒãã³ã¹ã«é¢ããèæ ®äºé
WasmGCã®ãªããžã§ã¯ãã¬ã€ã¢ãŠãã®èšèšã¯ãããã©ãŒãã³ã¹ã«å€§ããªåœ±é¿ãäžããŸããããã©ãŒãã³ã¹ã®ããã«ãªããžã§ã¯ãã¬ã€ã¢ãŠããæé©åããéã«ã¯ãããã€ãã®èŠå ãèæ ®ããå¿ èŠããããŸãïŒ
- ãã£ãã·ã¥ã®å±ææ§ïŒ é »ç¹ã«äžç·ã«ã¢ã¯ã»ã¹ããããã£ãŒã«ãã¯ããã£ãã·ã¥ã®å±ææ§ãæ¹åããããã«ã¡ã¢ãªå ã§äºãã«è¿ãã«é 眮ããå¿ èŠããããŸãã
- ãªããžã§ã¯ããµã€ãºïŒ ãªããžã§ã¯ããå°ããã»ã©ãæ¶è²»ããã¡ã¢ãªãå°ãªããªããããè¿ éã«å²ãåœãŠããã³è§£æŸã§ããŸããããã£ã³ã°ãäžèŠãªãã£ãŒã«ããæå°éã«æããŸãã
- ã¢ã©ã€ã¡ã³ãïŒ é©åãªã¢ã©ã€ã¡ã³ãã¯ãå¹ççãªã¡ã¢ãªã¢ã¯ã»ã¹ãä¿èšŒããããŒããŠã§ã¢äŸå€ãåé¿ããŸãã
- ã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã®ãªãŒããŒãããïŒ ãªããžã§ã¯ãã¬ã€ã¢ãŠãã¯ãã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã®ãªãŒããŒããããæå°éã«æããããã«èšèšããå¿ èŠããããŸããäŸãã°ãã³ã³ãã¯ããªãªããžã§ã¯ãã¬ã€ã¢ãŠãã䜿çšãããšãã¬ããŒãžã³ã¬ã¯ã¿ãã¹ãã£ã³ããå¿ èŠã®ããã¡ã¢ãªéãæžããããšãã§ããŸãã
ãããã®èŠå ãæ éã«èæ ®ããããšã§ãå€§å¹ ãªããã©ãŒãã³ã¹ã®åäžãããããããå¯èœæ§ããããŸãã
WasmGCãªããžã§ã¯ãã¬ã€ã¢ãŠãã®æªæ¥
WasmGCææ¡ã¯ãŸã é²åã®éäžã«ããããªããžã§ã¯ãã¬ã€ã¢ãŠãã®å ·äœçãªè©³çŽ°ã¯æéãšãšãã«å€ããå¯èœæ§ããããŸãããããããã®èšäºã§æŠèª¬ããåºæ¬ååã¯ãåŒãç¶ãéèŠã§ãããšèããããŸããWasmGCãæçããã«ã€ããŠããªããžã§ã¯ãã¬ã€ã¢ãŠãèšèšã«ããããããªãæé©åãšé©æ°ãèŠãããããšãæåŸ ãããŸãã
å°æ¥ã®ç ç©¶ã¯ã以äžã®ãããªç¹ã«çŠç¹ãåœãŠããããããŸããïŒ
- é©å¿åãªããžã§ã¯ãã¬ã€ã¢ãŠãïŒ ã©ã³ã¿ã€ã ã®äœ¿çšãã¿ãŒã³ã«åºã¥ããŠãªããžã§ã¯ãã¬ã€ã¢ãŠããåçã«èª¿æŽããã
- ç¹æ®åããããªããžã§ã¯ãã¬ã€ã¢ãŠãïŒ æååãé åãªã©ãç¹å®ã®åã®ãªããžã§ã¯ãã«å¯ŸããŠç¹æ®åããããªããžã§ã¯ãã¬ã€ã¢ãŠããèšèšããã
- ããŒããŠã§ã¢æ¯æŽã«ããã¬ããŒãžã³ã¬ã¯ã·ã§ã³ïŒ ããŒããŠã§ã¢æ©èœã掻çšããŠã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãé«éåããã
ãããã®é²æ©ã¯ãWasmGCã®ããã©ãŒãã³ã¹ãšå¹çãããã«åäžããããããŒãžãèšèªãå®è¡ããããã®ãã©ãããã©ãŒã ãšããŠããã«é åçãªãã®ã«ããã§ãããã
çµè«
WasmGCã®ãªããžã§ã¯ãã¬ã€ã¢ãŠããçè§£ããããšã¯ãããã©ãŒãã³ã¹ã®æé©åãçžäºéçšæ§ã®å®çŸããããŠæŽç·Žãããã¢ããªã±ãŒã·ã§ã³ã®æ§ç¯ã«äžå¯æ¬ ã§ãããªããžã§ã¯ããããããã£ãŒã«ããé åãåèšè¿°åã®èšèšãæ éã«èæ ®ããããšã§ãã³ã³ãã€ã©äœæè ãã¢ããªã±ãŒã·ã§ã³éçºè ãããã³Wasmãšã³ãžã³ã®å®è£ è ã¯ãå¹ççã§å ç¢ãªã·ã¹ãã ãäœæã§ããŸããWasmGCãé²åãç¶ããã«ã€ããŠããªããžã§ã¯ãã¬ã€ã¢ãŠãèšèšã«ããããããªã驿°ãééããªãçŸãããã®èœåãããã«é«ãããŠã§ããšãã®å ã®æªæ¥ã®ããã®äž»èŠæè¡ãšããŠã®å°äœãåºããã§ãããã
ãã®èšäºã§ã¯ãWasmGCã®ãªããžã§ã¯ãã¬ã€ã¢ãŠãã«é¢é£ããäž»èŠãªæŠå¿µãšèæ ®äºé ã«ã€ããŠè©³çŽ°ãªæŠèŠãæäŸããŸããããããã®ååãçè§£ããããšã§ãWasmGCã广çã«æŽ»çšããŠã髿§èœã§çžäºéçšå¯èœããã€ä¿å®æ§ã®é«ãã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ã§ããŸãã
远å ãªãœãŒã¹
- WebAssembly GC Proposal: https://github.com/WebAssembly/gc
- WebAssembly Specification: https://webassembly.github.io/spec/